package com.shujia

object Demo26Implicit {
  def main(args: Array[String]): Unit = {
    val array: List[Int] = List(1, 2, 3, 4, 5, 6)


    println(array.max)
    println(array.sum)
    println(array.reverse)


    println("=" * 100)

    /**
      * 类中并没有这个方法,
      * 通过隐式转换增加方法
      *
      */


    /**
      * 隐式转换方法
      *
      */

    def print(str: String): Unit = println(str)

    print("java")

    //显示转换
    print(1.toString)


    //定义一个隐式转换的方法
    implicit def intToStirng(i: Int): String = {

      println("隐式转换方法生效了")
      i.toString
    }

    /**
      *
      * 隐式转换和方法名无关
      * 和参数类型返回值类型有关
      *
      */

    implicit def asd(i: Double): String = i.toString + "d"


    /**
      * scala在调用方法的时候如果参数类型不对,
      * 会在当前作用域中找一个隐式转换方法, 将传入的类型转换成实际要求的类型
      *
      */
    print(100)

    print(100.0)

    /**
      *
      * 隐式转换和方法名无关, 和参数类型返回值类型有关
      *
      *
      * 注意: 同一个作用域中只能有一个参数类型和返回值类型一样的隐式转换
      *
      *
      * 隐式转换方法
      *   参数类型为A   返回值类型为B   隐式转换会自动将A 转换成B
      *
      */


  }
}
